"""
文件操作
大概可以分为三个步骤（简称文件操作三步走）：
① 打开文件
② 读写文件
③ 关闭文件

可以只打开和关闭文件，不进行任何读写


=========================================================
open()打开函数
open(name, mode, encoding)
- name：是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
- mode：设置打开文件的模式(访问模式)：只读、写入、追加等。
- encoding:编码格式（推荐使用UTF-8）

mode常用的三种基础访问模式
- r：以只读的方式打开文件，文件的指针放在文件开头，这是默认方式
- w：打开一个文件只用于写入，如果文件已存在则打开文件，并从头开始编辑，原有内容会被删除，如果文件不存在，创建新文件
- a：打开一个文件用于追加，如果文件已存在，新内容将会被写入到已有内容之后，如果文件不存在，创建新文件写入


=========================================================
读操作相关方法
文件对象.read(num)
- num表示要从文件中读取的数据的长度（单位是字节），如果没有传入num，那么就表示读取文件中所有的数据。

=========================================================
with open 语法（会自动关闭文件）
- with open("F:/代码.txt", "r", encoding="UTF-8") as f:
- 通过在with open的语句块中对文件进行操作
- 可以在操作完成后自动关闭close文件，避免遗忘掉close方法

"""

# encoding的顺序不是第三位，所以不能用位置参数，用关键字参数直接指定
f = open("test.txt", "r", encoding="UTF-8")
# 此时的f是open函数的文件对象，对象是Python中一种特殊的数据类型，拥有属性和方法，可以使用对象.属性或对象.方法对其进行访问，
print(f"该文件前10个字节内容为：{f.read(10)}")
print("=========================================================")
print(f"该文件剩余全部内容为：{f.read()}")
print("=========================================================")
# readlines可以按照行的方式把整个文件中的内容进行一次性读取，并且返回的是一个列表，其中每一行的数据为一个元素。
f = open("test.txt", "r", encoding="UTF-8")
print(f"该文件全部行内容为：{f.readlines()}")
print("=========================================================")
# readline一行一行的读取
f = open("test.txt", "r", encoding="UTF-8")
print(f"该文件第一行内容为：{f.readline()}")
print(f"该文件第二行内容为：{f.readline()}")
print(f"该文件第三行内容为：{f.readline()}")
print("=========================================================")
# for循环读取文件行
f = open("test.txt", "r", encoding="UTF-8")
count = 1
for i in f:
    print(f"第{count}行的内容是：{i}")
    count += 1
print("=========================================================")
# for循环读取文件行
f = open("test.txt", "r", encoding="UTF-8")
count = 1
for i in f.readlines():
    print(f"第{count}行的内容是：{i}")
    count += 1
print("=========================================================")

# 关闭文件对象
f = open("test.txt", "r", encoding="UTF-8")
f.close()
# 最后通过close，关闭文件对象，也就是关闭对文件的占用
# 如果不调用close,同时程序没有停止运行，那么这个文件将一直被Python程序占用。


# 单词记数
f = open("word.txt", "r", encoding="UTF-8")
count = 0
for line in f:
    # 去除开头和结尾的空格和换行符
    line = line.strip()
    words = line.split(" ")
    for word in words:
        if word == "pikaqiu":
            count += 1
f.close()
print(f"文件中pikaqiu单词的个数:{count}")
print("=========================================================")

count = 0
with open("word.txt", "r", encoding="UTF-8") as f:
    for line in f:
        # 去除开头和结尾的空格和换行符
        line = line.strip()
        words = line.split(" ")
        for word in words:
            if word == "pikaqiu":
                count += 1
print(f"文件中pikaqiu单词的个数:{count}")
print("=========================================================")
